<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>监视属性03</title>
  <script type="text/javascript" src="../vue.js"></script>
</head>


<!--
    深度监视 ：
        1.Vue中的watch默认不监测对象内部值的改变（一层）；
        2.配置deep：true可以监测对象内部值的改变（多层）；
     备注：
        1.Vue自身可以监测对象内部值的改变，但Vue提供的watch默认不可以
        2.使用watch时根据数据的具体结构，决定是否采用深度监视
-->
<body>
<!-- 准备好 一个容器-->
<div id="root">
  <h2>今天天气很{{info}}</h2>
  <button @click="changeWeather">切换天气</button>
  <hr/>
  <h3>a的值是:{{numbers.a}}</h3>
  <button @click="numbers.a++">点我a+1</button>
  <h3>b的值是:{{numbers.b}}</h3>
  <button @click="numbers.b++">点我b+1</button>
<!--  <button @click="numbers = {a:666,b:888}">彻底替换numbers</button>-->
</div>

</body>



<script type="text/javascript">

  Vue.config.productionTip = false //设置为 false 以阻止 vue 在启动时生成生产提示。

  //创建Vue实例
  const vm = new Vue({
    el:'#root',
    data:{
      isHot:true,
      numbers:{
        a:1,
        b:1
      }
    },
    methods:{
      changeWeather(){
        this.isHot = !this.isHot
      }
    },
    computed:{
      info(){
        return  this.isHot ?'炎热':'寒冷'
      }
    },
    watch:{
      isHot:{
        // immediate:true, // 初始化时让 handler调用一次
        //当isHot发生改变时，handler被调用
        handler(newValue,oldValue){
          console.log('isHot被改变为'+this.info,newValue,oldValue)
        }
      },
      //监视多级结构中的某个属性值的变化
      'numbers.a':{
        handler() {
          console.log('a被修改了')
        }
      },
      //监视多级结构中的所有属性值的变化:深度监视
      numbers:{
        deep:true,
        handler(){
          console.log('numbers改变了')
        }
      }
    }
  })

</script>
</html>
